<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 父构造函数
        function Father(uname,age){
            this.uname = uname
            this.age = age
        }

        // 子构造函数
        function Son(uname,age,score){
            Father.call(this,uname,age)  //继承父构造函数，即父类的this被子类的this替换了
            this.score = score           //不影响子类自己this的使用
        }
        // 子类专有的方法
        Son.prototype.exam = function(){
            console.log('孩子要考试');
        }


        // 也可以将子类的原型对象 new 一个父类的构造函数
        // 若利用对象的形式修改了原型对象，则需要利用 constructor 指回原来的构造函数
        Son.prototype = new Father()
        Son.prototype.constructor = Son


        const son = new Son('张三',18,99)
        console.log(son);
        console.log(Father.prototype);
        console.log(Son.prototype.constructor);
    </script>
</body>
</html>